iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
Software Development

MCP的30天養成計畫系列 第 11

【Day 11】FastMCP Tool的建構方式(二)

  • 分享至 

  • xImage
  •  

使用 mcp.tool 註冊工具和傳輸方式

本文件說明如何使用 mcp.tool 註冊工具,以及 MCP 中可用的三種不同傳輸方式。

使用 mcp.tool 註冊工具

mcp.tool 裝飾器用於將 Python 函式註冊為可由 AI 模型呼叫的工具。這使您可以使用自訂函式擴展 AI 模型的功能。

範例

這邊示範一個依據使用者使用時間,進行不同招呼方式的function:

from mcp.server.fastmcp import FastMCP
from datetime import datetime

mcp = FastMCP(name="greeting")

@mcp.tool(description="這是一個打招呼的工具")
async def greeting():
    now_time = int(datetime.now().hour)
    if 7 < now_time < 12:
        return "早安"
    elif 12 < now_time < 17:
        return "下午好啊!"
    elif 17 < now_time < 23:
        return "哈囉!晚上了呢!"
    else:
        return "哇!怎麼還沒睡?"


if __name__ == "__main__":
    mcp.run(transport="stdio")

在此範例中,greeting 函式被註冊為一個工具,可以在description中描述工具用途,為之後整個Graph製作鋪路(強烈推薦把description寫清楚,可以讓llm更加清楚工具的使用時機)。

AI 模型現在可以按名稱呼叫此工具,並提供必要的參數。函式的說明字串將作為工具的描述供 AI 模型使用。

傳輸方式

mcp.tool() 只是一個將函式設定成一個MCP TOOL的方式,但真正執行這個工具的是Server。

要怎麼讓Server跑起來呢?目前FastMCP支援兩種主要的傳輸模式(transport),外加一個未來可能被拿掉的。

1. stdio

stdio 是最廣泛、預設使用的,非常適合本地工具、命令列整合以及 Claude Desktop 等客戶端。

但缺點就是必須在本地端運行,若要提供給第三方使用則需使用streamble-http。

if __name__ == "__main__":
    mcp.run(transport="stdio")

# transport="stdio"是官方預設

2. streamable-http

streamble-http相對於stdio,可以提供給更多人使用

stdio是只能給本地使用,但streamble-http的方式可以提供網址,讓第三方去使用你的Server

if __name__ == "__main__":
    mcp.run(transport="http", host="0.0.0.0", port=8000, path="/mcp")

# 要寫transport="http"或transport="streamble-http"都可以

3. sse (未來可能被拿掉)

因官方警告sse未來會被拿掉,推薦大家使用streamble-http,這邊就不多介紹sse,仍想了解這部分,請參閱官方文件


上一篇
【Day 10】FastMCP Tool的建構方式(一)
下一篇
【Day 12】使用Tool前,來了解LangChain吧(一)
系列文
MCP的30天養成計畫14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言